iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0

什麼是json

前一章有稍微提到json,那麼json是什麼呢?
JavaScript物件表示法(JavaScript Object Notation)簡稱json。
JSON以純文字去儲存和傳送結構資料,你可以靠特定的格式去儲存特定格式的資料,比如:數字,字串,陣列
雖然名稱內有JavaScript,但是其他語言也支援解析json,當然也包含go。

go內的json

在go內,可以透過struct和json.Unmarshal跟json.Marshal去解析json跟將struct轉成json,
前一章有展示過如何unmarshal json,這邊則介紹如何marshal

type userPara struct {
 	ID         string `json:"id"`
 }
 userParaExample := &userPara{
     ID: "123",
 }
 jsondata, _ := json.Marshal(userParaExample)

透過這種方式,就可以產生json jsondata([]byte)。
前一章提到,如果靠原生的go json套件,只能用unmarshal的方式來把資料取出來,
但是這在資料量大的情況,會很吃記憶體,這時就可以使用jsonparser這個套件來取出你要的值。

buger/jsonparser

這個jsonparser套件有著很強大的效能,
效能是內建的encoding/json的10倍,由於他是只依靠內建的bytes套件去操作字串,
所以有著很強大的效能。
使用上也非常簡單:

data := []byte(`{
  "id": "123"
  
}`)
idString, err := jsonparser.GetString(data, "id")
if err !=nil {
    ...
}

在知道key的情況下,直接指定你要抓的key值就可以取出你要的資料
對於int則是:

idInt, err := jsonparser.GetInt(data, "id")

如果是array則改用下面這種方式

data := []byte(`{
  "id":[ 
      "123",
      "234",
      "456"
  ]
}`)

jsonparser.ArrayEach(data, func(value []byte, dataType jsonparser.ValueType, offset int, err error) {
	fmt.Println(string(value))
}, "id")

透過這些方式,可以用不消耗記憶體的方式取出你要的值。


上一篇
Day11-http參數
下一篇
Day13-回應
系列文
從0開始的golang web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言